package org.common.utils.net.netty.http.listener;

import org.common.utils.net.netty.http.listener.entity.ListenerInfo;

import java.util.List;

/**
 * 监听器
 * @author zhouzhibing
 * @date 2025/11/24 13:08
 */
public interface HttpListener<T extends ListenerInfo> {

    /**
     * 监听器类型
     */
    Key getKey();
    /**
     * 监听器处理
     * @param listener 监听器信息
     */
    void doListener(T listener);

    /**
     * 批量监听器
     */
    interface Batch {
        /**
         * 获取监听器
         * @return 监听器列表
         */
        List<HttpListener<?>> getListeners();
    }

    /**
     * 监听器类型枚举
     */
    enum Key {
        /**
         * channel激活
         */
        CHANNEL_ACTIVE,
        /**
         * channel开始读取数据
         */
        CHANNEL_READ_START,
        /**
         * 请求开始
         */
        HANDLER_REQUEST_BEFORE,
        /**
         * 请求结束
         */
        HANDLER_REQUEST_AFTER,
        /**
         * 请求异常
         */
        HANDLER_EXCEPTION,
        /**
         * channel异常
         */
        CHANNEL_EXCEPTION,
        /**
         * channel关闭
         */
        CHANNEL_UNREGISTERED
    }

}
